export function renderMixin(Vue) {
    // 元素处理
    Vue.prototype._c = function () {

        return createElement(...arguments)
    }

    // 文本处理
    Vue.prototype._v = function (text) {
        return createTextNode(text)
    }

    // 变量处理
    Vue.prototype._s = function (val) {
        /*        如果是对象 需要 JSON.stringify 避免变成['Object', 'Object']，另外，后续如果 有个 data: {
                   a: { a: 1 }
               },
               如果这时候 用js 修改 a.a = 100, 此时如果 页面上 是 { { a } } 则会显示成 { "a": 100}，
               因为 JSON.stringify 会将值 取出来 再进行操作，所以虽然这时的对象是引用类型，但属性是会被劫持的 */
        return val == null ? '' : (typeof val == 'object') ? JSON.stringify(val) : val;
    }

    // 主要render函数
    Vue.prototype._render = function () {
        const vm = this;
        const render = vm.$options.render
        const vnode = render.call(vm)
        return vnode
    }
}

function vnode(tag, data, key, children, text) {
    return {
        tag,
        data,
        key,
        children,
        text
    }
}

function createElement(tag, data = {}, ...children) {
    return vnode(tag, data, data.key, children);
}

function createTextNode(text) {
    return vnode(undefined, undefined, undefined, undefined, text);
}


